#include "ssh.h"
#include <stdexcept>

ssh::ssh(const std::string &host, int port, int timeout) : session(ssh_new()) {
  status = ssh_options_set(session, SSH_OPTIONS_HOST, host.c_str());
  if (status != SSH_OK) {
    throw std::runtime_error("Ошибка при установке host!");
  }

  status = ssh_options_set(session, SSH_OPTIONS_PORT, &port);
  if (status != SSH_OK) {
    throw std::runtime_error("Ошибка при установке port!");
  }

  status = ssh_options_set(session, SSH_OPTIONS_TIMEOUT, &timeout);
  if (status != SSH_OK) {
    throw std::runtime_error("Ошибка при установке времени!");
  }

  status = ssh_connect(session);
  if (status != SSH_OK) {
    throw std::runtime_error(
        "Ошибка подключения к ssh, проверьте настройки порта!");
  }
}

ssh::~ssh() {
  ssh_disconnect(session);
  ssh_free(session);
}

/**
 * Подбираем пароль к серверу
 * Возвращаем статус подбора
 */
int ssh::ssh_auth_server(const std::string &password,
                         const std::string &users) {
  status = ssh_options_set(session, SSH_OPTIONS_USER, users.c_str());
  if (status != SSH_OK) {
    throw std::runtime_error(
        "Не получилось установить пользователя для подключения к ssh");
  }

  return ssh_userauth_password(session, NULL, password.c_str());
}
